﻿#define _CRT_SECURE_NO_WARNINGS 1

/*
int main()
{
	//int a = 1;
	//1 --> int --> 4B --> 32bit
	//原码: 00000000000000000000000000000001
	//反码: 00000000000000000000000000000001
	//补码: 00000000000000000000000000000001

	//int b = -1;
	//-1 --> int --> 4B --> 32bit
	//原码：10000000000000000000000000000001
	//反码：11111111111111111111111111111110
	//补码：11111111111111111111111111111111



	return 0;
}*/

//#include <stdio.h>
//int main()
//{
//	int num = 10;
//	int n = num << 1;
//	int a = num << -1; //左移操作符 右操作数不能为负数
//
//	printf("n= %d\n", n);
//	printf("num= %d\n", num);
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int a = -1;
//	printf("%d", a >> 1);
//
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int a = -6;
//	//-6 --> int --> 4B --> 32bit
//	//原码: 10000000 00000000 00000000 00000110
//	//反码: 11111111 11111111 11111111 11111001
//	//补码: 11111111 11111111 11111111 11111010
//
//	int b = a << 1;
//	//补码: 11111111 11111111 11111111 11110100
//	//原码：10000000 00000000 00000000 00001100
//
//	printf("%d\n", b);//-12
//	printf("%d\n", a);//-6
//
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	int num1 = -3;
//	//-3 --> int --> 4B --> 32bit
//	//10000000 00000000 00000000 00000011 原码
//	//11111111 11111111 11111111 11111100 反码
//	//11111111 11111111 11111111 11111101 补码
//
//	int num2 = 5;
//	//5
//	//00000000 00000000 00000000 00000101 原反补
//
//	printf("%d\n", num1 & num2); //5
//	//& --> 有一个0就是0，有两个1才为1
//	//11111111 11111111 11111111 11111101
//	//00000000 00000000 00000000 00000101
//	//00000000 00000000 00000000 00000101
//
//	printf("%d\n", num1 | num2); //-3
//	//| --> 有一个1就是1，有两个0才为0
//	//11111111 11111111 11111111 11111101
//	//00000000 00000000 00000000 00000101
//	//11111111 11111111 11111111 11111101
//
//	printf("%d\n", num1 ^ num2); //-8
//	//^ --> 相同为0，相异为1
//	//11111111 11111111 11111111 11111101
//	//00000000 00000000 00000000 00000101
//	//11111111 11111111 11111111 11111000 补码
//	//10000000 00000000 00000000 00000111 反码
//	//10000000 00000000 00000000 00001000 原码
//
//	printf("%d\n", ~0); //-1
//	//~ -->按位取反
//	//00000000 00000000 00000000 00000000
//	//11111111 11111111 11111111 11111111 补码
//	
//
//
//	return 0;
//}

//实现两个数的交换
//1.创建临时变量

//#include <stdio.h>
//int main()
//{
//	int a = 3;
//	int b = 4;
//	int c = 0;
//
//	printf("交换前：a=%d,b=%d\n", a, b);
//	c = a;
//	a = b;
//	b = c;
//	printf("交换后：a=%d,b=%d", a, b);
//	return 0;
//}

//2.加减
//#include <stdio.h>
//int main()
//{
//	int a = 3;
//	int b = 4;
//
//	printf("交换前：a=%d,b=%d\n", a, b);
//	a = a + b;
//	b = a - b; //a+b-b
//	a = a - b; //a+b-a
//	printf("交换后：a=%d,b=%d", a, b);
//
//	return 0;
//}

//3.异或
//#include <stdio.h>
//int main()
//{
//	int a = 3;
//	int b = 4;
//
//	printf("交换前：a=%d,b=%d\n", a, b);
//	a = a ^ b;
//	b = a ^ b;
//	a = a ^ b;
//	printf("交换后：a=%d,b=%d", a, b);
//
//	return 0;
//}

//求⼀个整数存储在内存中的⼆进制中1的个数
//% /
//#include <stdio.h>
//int main()
//{
//	unsigned int n = 0; //改为unsigned int-->负数可用-->-1补码为全1，变成无负号整形为极大的正数
//	int count = 0;
//	scanf("%d", &n);
//
//	while (n)
//	{
//		if (n % 2 == 1)
//		{
//			count++;
//		}
//
//		n /= 2;
//	}
//
//	printf("%d", count);
//
//	return 0;
//}

//按位与
//#include <stdio.h>
//int main()
//{
//	int n = 0;
//	int count = 0;
//	scanf("%d", &n);
//
//	//将每一位和1按位与
//	for (int i = 0;i < 32;++i)
//	{
//		if (((n >> i) & 1) == 1)  //按位与结果是1，说明末尾位是1，结果是0，说明末尾位是0
//		{
//			count++;
//		}
//	}
//
//	printf("%d", count);
//
//	return 0;
//}

//n&(n-1) --> 逐渐去除最右侧的1，直到n为0,
//#include <stdio.h>
//int main()
//{
//	int n = 0;
//	int count = 0;
//	scanf("%d", &n);
//
//	while (n)
//	{
//		n = n & (n - 1);
//		count++;
//	}
//
//	printf("%d", count);
//	return 0;
//}

//将13二进制序列的第5位修改为1，再改为0
//#include <stdio.h>
//int main()
//{
//	int n = 13;
//	
//	//第五位改为1
//	n = n | (1 << 4);
//	printf("%d\n", n); //29
//
//	//改回0
//	n = n & (~(1 << 4));
//	printf("%d", n);
//
//	return 0;
//}

//#include <stdio.h>
//int main()
//{
//	//int a = 1;
//	//int b = 2;
//	//int c = (a > b, a = b + 10, a, b = a + 1);//逗号表达式
//	//printf("%d", c);
//
//	//int a = 0, b = 0, c = 0, d = 0;
//	//if (a = b + 1, c = a / 2, d > 0)
//	//{
//
//	//}
//
//	
//	//while (a = get_val(), count_val(a), a > 0)
//	//{
//	//	//业务处理
//
//	//}
//
//	return 0;
//}

//判断两个数字二进制位有几位不同
#include <stdio.h>
int main() {

    int a = 0;
    int b = 0;
    int count = 0;

    while (scanf("%d %d", &a, &b) != EOF)
    {
        int count = 0;
        int c = a ^ b;

        while (c)
        {
            c = c & (c - 1);
            count++;
        }

        printf("%d", count);
    }

    return 0;
}

